/*
 * Define una implentación para una pila utilizando como base 
 * el ArrayList de Java.
 * 
 * Obtenido de los documentos de Blackboard del curso de Algoritmos y
 * Estructuras de Datos.
 * Autor: Ing. Douglas Barrios
 */

package Stack;

import java.util.ArrayList;

/**
 * 
 * @author Ing. Douglas Barrios
 * @param <E> Tipo de dato que la pila estará utilizando.
 */
public class StackArrayList<E>
 implements Stack<E>
{
    protected ArrayList<E> data;

    public StackArrayList()
    // @Post  constructs a new, empty stack
    {
            data = new ArrayList<E>();
    }

    @Override
    public void push(E item)
    // @Post  the value is added to the stack
    //          will be popped next if no intervening push
    {
            data.add(item);
    }

    @Override
    public E pop()
    // @Pre  stack is not empty
    // @Post  most recently pushed item is removed and returned
    {
            return data.remove(size()-1);
    }

    @Override
    public E peek()
    // @Pre  stack is not empty
    // @Post  top value (next to be popped) is returned
    {
            return data.get(size() - 1);
    }

    @Override
    public int size()
    // @Post  returns the number of elements in the stack
    {
            return data.size();
    }

    @Override
    public boolean empty()
    // @Post  returns true if and only if the stack is empty
    {
            return size() == 0;
    }
}